package com.huike.web.controller.system;

import com.huike.clues.service.SysDeptServices;
import com.huike.common.constant.UserConstants;
import com.huike.common.core.domain.AjaxResult;
import com.huike.common.core.domain.MPentity.Dept;
import com.huike.common.core.domain.TreeSelect;
import com.huike.common.core.domain.entity.SysDept;
import com.huike.web.result.RoleDeptTreeAjaxResult;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Description TODO
 * @Author 小不夜侯
 * @Date 2023-08-31 14:10
 */
@RestController
@RequestMapping("/system/dept")
@Slf4j
@Api(tags = "部门管理相关接口")
public class SysDeptController {
    @Resource
    private SysDeptServices sysDeptServices;

    /**
     * 获取部门列表
     * @param
     * @param
     * @return
     */
    @GetMapping("/list")
    public AjaxResult<List<Dept>> list(Dept dept){
        log.info("获取部门列表:{}" ,dept);
        List<Dept> depts = sysDeptServices.listDept(dept);
        return AjaxResult.success(depts);
    }

    /**
     * 新增部门
     * @param sysDept
     * @return
     */
    @PostMapping
    public AjaxResult insertDept(@RequestBody SysDept sysDept){
        log.info("新增部门:{}",sysDept);
        String notdeptnull = sysDeptServices.notdeptnull(sysDept);
        if (UserConstants.NOT_UNIQUE.equals(notdeptnull)){
            return    AjaxResult.success("部门已存在");
        }
        sysDeptServices.insertDept(sysDept);
        return AjaxResult.success();
    }

    /**
     * 根据部门编号获取详细信息
     * @param deptId
     * @return
     */
    @GetMapping("/{deptId}")
    public AjaxResult getdept(@PathVariable Integer deptId ){
        log.info(":根据部门编号获取详细信息:{}",deptId);
        Dept byId = sysDeptServices.getById(deptId);
        return AjaxResult.success(byId);
    }

    /**
     * 查询部门列表（排除指定部门节点）
     * @param deptId
     * @return
     */
    @GetMapping("/list/exclude/{deptId}")
    public AjaxResult excludeDeptId(@PathVariable Integer deptId ){
        log.info(":查询部门列表（排除指定部门节点）:{}",deptId);
        List<Dept> list= sysDeptServices.excludeDeptId(deptId);
        return AjaxResult.success(list);
    }

    /**
     * 修改部门
     * @param sysDept
     * @return
     */
    @PutMapping
    public AjaxResult updateDept( @RequestBody SysDept sysDept){
        log.info("修改部门:{}",sysDept);
        if (UserConstants.NOT_UNIQUE.equals(sysDeptServices.notdeptnull(sysDept)))
        {
            return AjaxResult.error("修改部门失败，部门名称已存在");
        }
        else if (sysDept.getParentId().equals(sysDept.getDeptId()))
        {
            return AjaxResult.error("修改部门失败，上级部门不能是自己");
        }

        sysDeptServices.updateDept(sysDept);
        return AjaxResult.success();
    }


}
